<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>日程安排系统答辩稿</title>
    <style>
        body {
            font-family: '微软雅黑', Arial, sans-serif;
            font-size: 14pt;
            line-height: 1.6;
            margin: 0;
            padding: 20px;
            background-color: white;
        }

        .container {
            max-width: 800px;
            margin: 0 auto;
            padding: 20px;
        }

        h1 {
            color: #2c3e50;
            text-align: center;
            font-size: 24pt;
            margin-bottom: 30px;
        }

        h2 {
            color: #34495e;
            font-size: 18pt;
            border-bottom: 2px solid #3498db;
            padding-bottom: 5px;
            margin-top: 30px;
        }

        h3 {
            color: #2c3e50;
            font-size: 16pt;
            margin-top: 20px;
        }

        .speak-note {
            background: #fff3cd;
            border-left: 4px solid #ffc107;
            padding: 15px;
            margin: 15px 0;
            font-style: italic;
        }

        .code-demo {
            background: #f8f9fa;
            border: 1px solid #dee2e6;
            padding: 15px;
            margin: 15px 0;
            font-family: 'Courier New', monospace;
            font-size: 12pt;
        }

        .key-point {
            background: #d4edda;
            border: 1px solid #c3e6cb;
            padding: 15px;
            margin: 15px 0;
            border-radius: 5px;
        }

        .demo-result {
            background: #e2e3e5;
            border: 1px solid #c6c8ca;
            padding: 10px;
            margin: 10px 0;
            font-family: monospace;
        }

        ul,
        ol {
            margin: 10px 0;
            padding-left: 30px;
        }

        li {
            margin: 8px 0;
        }

        .highlight {
            background: #ffeb3b;
            padding: 2px 5px;
        }
    </style>
</head>

<body>
    <div class="container">
        <h1>Java日程安排系统答辩稿</h1>

        <div class="speak-note">
            <strong>开场白：</strong>
            各位老师好！今天我要向大家介绍的是我开发的Java日程安排系统。这个系统虽然看起来简单，但是麻雀虽小五脏俱全，里面包含了很多有趣的编程技术和算法思想。
        </div>

        <h2>一、项目整体介绍</h2>

        <h3>1.1 系统功能演示</h3>
        <div class="speak-note">
            <strong>说明：</strong>首先让我演示一下这个系统能做什么。
        </div>

        <div class="demo-result">
            === 欢迎使用日程安排系统 ===
            成功加载 10 个日程。

            === 主菜单 ===
            1. 添加日程
            2. 查询日程
            3. 修改日程
            4. 删除日程
            5. 显示所有日程
            6. 退出系统
        </div>

        <p>大家可以看到，这个系统提供了完整的日程管理功能。最重要的是，它还能<span class="highlight">智能检测时间冲突</span>，这是我觉得比较有技术含量的地方。</p>

        <h3>1.2 技术架构简介</h3>
        <div class="key-point">
            <strong>核心技术点：</strong>
            <ul>
                <li>面向对象编程 - 用类和对象来组织代码</li>
                <li>文件IO操作 - 数据能持久保存</li>
                <li>时间冲突算法 - 这是我重点要讲的</li>
                <li>异常处理机制 - 让程序更稳定</li>
            </ul>
        </div>

        <h2>二、核心算法讲解</h2>

        <h3>2.1 时间冲突检测算法</h3>
        <div class="speak-note">
            <strong>重点来了：</strong>这是整个系统最有技术含量的部分。怎么判断两个日程的时间是否冲突？
        </div>

        <p>我们先来看看什么情况叫"不冲突"：</p>
        <ul>
            <li>日程A完全在日程B之前结束</li>
            <li>日程B完全在日程A之前结束</li>
        </ul>

        <p>那么冲突就是"不冲突"的反面！</p>

        <div class="code-demo">
            public boolean hasTimeConflict(Schedule other) {
            // 用数学思维：不冲突的反面就是冲突
            return !(this.endTime.before(other.startTime) ||
            other.endTime.before(this.startTime));
            }
        </div>

        <div class="key-point">
            <strong>算法亮点：</strong>
            <ul>
                <li>时间复杂度：O(1) - 常数时间，非常高效</li>
                <li>逻辑简洁：一行代码解决复杂问题</li>
                <li>数学思维：用反向思考简化逻辑</li>
            </ul>
        </div>

        <h3>2.2 实际应用场景</h3>
        <div class="speak-note">
            <strong>举个例子：</strong>比如我要在下午2点到4点开会，系统会检查这个时间段是否与现有日程冲突。
        </div>

        <div class="demo-result">
            警告：发现时间冲突的日程：
            [a1b2c3d4] 项目启动会议 (2025-06-15 14:30 - 2025-06-15 16:00)
            内容：讨论新项目规划
            参与人员：张三,李四,王五

            是否仍要添加此日程？(y/n)
        </div>

        <h2>三、代码架构设计</h2>

        <h3>3.1 面向对象设计</h3>
        <div class="speak-note">
            <strong>设计思路：</strong>我把整个系统分成了两个主要的类。
        </div>

        <div class="key-point">
            <strong>类设计：</strong>
            <ul>
                <li><strong>ScheduleManager类</strong> - 系统的大脑，负责管理所有功能</li>
                <li><strong>Schedule类</strong> - 单个日程的数据模型，包含所有日程信息</li>
            </ul>
        </div>

        <h3>3.2 Schedule类详解</h3>
        <div class="code-demo">
            static class Schedule {
            private String id; // 唯一标识
            private String title; // 日程标题
            private Date startTime; // 开始时间
            private Date endTime; // 结束时间
            private String content; // 详细内容
            private String participants; // 参与人员

            // 构造方法、getter/setter方法...
            }
        </div>

        <div class="speak-note">
            <strong>设计亮点：</strong>我用了静态内部类，这样既保持了代码的整洁性，又节省了内存空间。
        </div>

        <h3>3.3 数据结构选择</h3>
        <p>我选择了<span class="highlight">ArrayList</span>来存储日程列表，为什么？</p>
        <ul>
            <li>查询频繁 - ArrayList的随机访问是O(1)</li>
            <li>插入删除不频繁 - 可以接受O(n)的代价</li>
            <li>内存占用少 - 比LinkedList更省内存</li>
        </ul>

        <h2>四、文件IO与数据持久化</h2>

        <h3>4.1 数据存储格式</h3>
        <div class="speak-note">
            <strong>简单有效：</strong>我设计了一个简单的文件格式，用竖线分隔各个字段。
        </div>

        <div class="code-demo">
            // 存储格式：ID|标题|开始时间|结束时间|内容|参与人员
            a1b2c3d4|项目会议|2025-06-15 09:00|2025-06-15 10:30|讨论需求|张三,李四
        </div>

        <h3>4.2 文件读写实现</h3>
        <div class="code-demo">
            // 保存数据
            try (PrintWriter writer = new PrintWriter(new FileWriter(DATA_FILE))) {
            for (Schedule schedule : schedules) {
            writer.println(schedule.toFileString());
            }
            }

            // 读取数据
            try (BufferedReader reader = new BufferedReader(new FileReader(DATA_FILE))) {
            String line;
            while ((line = reader.readLine()) != null) {
            Schedule schedule = Schedule.fromFileString(line);
            schedules.add(schedule);
            }
            }
        </div>

        <div class="key-point">
            <strong>技术亮点：</strong>
            <ul>
                <li>使用try-with-resources确保文件自动关闭</li>
                <li>每次操作后立即保存，数据不会丢失</li>
                <li>解析失败时跳过错误行，继续处理其他数据</li>
            </ul>
        </div>

        <h2>五、用户体验设计</h2>

        <h3>5.1 输入验证机制</h3>
        <div class="speak-note">
            <strong>用户友好：</strong>我花了很多精力在输入验证上，确保用户不会因为输入错误而困扰。
        </div>

        <div class="code-demo">
            private Date getDateInput(String prompt) {
            while (true) {
            try {
            String input = scanner.nextLine().trim();
            return dateFormat.parse(input);
            } catch (ParseException e) {
            System.out.println("日期格式错误，请按 yyyy-MM-dd HH:mm 格式输入！");
            String retry = getStringInput("是否重新输入？(y/n)");
            if (!retry.toLowerCase().startsWith("y")) {
            return null; // 用户可以选择取消
            }
            }
            }
            }
        </div>

        <h3>5.2 错误处理策略</h3>
        <div class="key-point">
            <strong>多层保护：</strong>
            <ul>
                <li>输入格式验证 - 防止用户输入错误</li>
                <li>业务逻辑检查 - 比如结束时间必须晚于开始时间</li>
                <li>文件操作异常处理 - 文件不存在时自动创建</li>
                <li>确认机制 - 删除操作需要二次确认</li>
            </ul>
        </div>

        <h2>六、系统功能演示</h2>

        <h3>6.1 添加日程功能</h3>
        <div class="demo-result">
            === 添加日程 ===
            请输入日程标题：团队会议
            请输入开始时间 (格式: yyyy-MM-dd HH:mm)：2025-06-15 14:00
            请输入结束时间 (格式: yyyy-MM-dd HH:mm)：2025-06-15 16:00
            请输入日程内容：讨论项目进展
            请输入参与人员：张三,李四,王五

            警告：发现时间冲突的日程：
            [i9j0k1l2] 技术方案评审 (2025-06-15 14:30 - 2025-06-15 16:30)

            是否仍要添加此日程？(y/n)：n
            已取消添加日程。
        </div>

        <h3>6.2 查询功能演示</h3>
        <div class="demo-result">
            === 查询日程 ===
            1. 按标题查询
            2. 按日期查询
            3. 按参与人员查询

            请选择查询方式：1
            请输入标题关键词：会议

            找到 3 个匹配的日程：
            [a1b2c3d4] 项目启动会议 (2025-06-15 09:00 - 2025-06-15 10:30)
            内容：讨论新项目规划
            参与人员：张三,李四,王五,赵六
        </div>

        <h2>七、技术难点与解决方案</h2>

        <h3>7.1 时间处理的复杂性</h3>
        <div class="speak-note">
            <strong>难点：</strong>Java的时间处理比较复杂，需要考虑格式化、解析、比较等多个方面。
        </div>

        <div class="key-point">
            <strong>解决方案：</strong>
            <ul>
                <li>统一使用SimpleDateFormat进行时间格式化</li>
                <li>封装专门的时间输入方法</li>
                <li>提供清晰的时间格式示例</li>
            </ul>
        </div>

        <h3>7.2 数据一致性问题</h3>
        <div class="speak-note">
            <strong>挑战：</strong>如何确保内存中的数据和文件中的数据保持一致？
        </div>

        <div class="key-point">
            <strong>解决方案：</strong>
            <ul>
                <li>每次数据变更后立即保存到文件</li>
                <li>程序启动时自动加载文件数据</li>
                <li>解析失败时不影响其他数据的加载</li>
            </ul>
        </div>

        <h2>八、项目亮点总结</h2>

        <div class="key-point">
            <strong>技术亮点：</strong>
            <ol>
                <li><strong>智能冲突检测</strong> - 用数学思维简化复杂逻辑</li>
                <li><strong>完善的异常处理</strong> - 程序稳定性高</li>
                <li><strong>用户友好的交互</strong> - 输入验证和错误提示</li>
                <li><strong>数据持久化</strong> - 程序重启后数据不丢失</li>
                <li><strong>模块化设计</strong> - 代码结构清晰，易于维护</li>
            </ol>
        </div>

        <div class="key-point">
            <strong>业务价值：</strong>
            <ul>
                <li>解决了日程管理的实际需求</li>
                <li>防止时间冲突，提高工作效率</li>
                <li>支持多维度查询，使用方便</li>
                <li>数据安全可靠，支持长期使用</li>
            </ul>
        </div>

        <h2>九、学习收获与反思</h2>

        <h3>9.1 技术能力提升</h3>
        <div class="speak-note">
            <strong>个人感悟：</strong>通过这个项目，我不仅学会了Java编程，更重要的是学会了如何分析问题、设计解决方案。
        </div>

        <ul>
            <li><strong>算法思维</strong> - 学会用数学方法简化复杂问题</li>
            <li><strong>工程思维</strong> - 考虑用户体验和异常情况</li>
            <li><strong>代码质量</strong> - 注重代码的可读性和可维护性</li>
        </ul>

        <h3>9.2 可以改进的地方</h3>
        <ul>
            <li>可以添加图形界面，更直观</li>
            <li>可以支持数据库存储，处理更大数据量</li>
            <li>可以添加网络功能，支持多用户</li>
            <li>可以增加提醒功能，更实用</li>
        </ul>

        <h2>十、总结</h2>

        <div class="speak-note">
            <strong>结束语：</strong>
            这个日程管理系统虽然功能不算复杂，但是体现了软件开发的完整流程：需求分析、系统设计、编码实现、测试调试。特别是时间冲突检测算法，我觉得是一个很好的算法应用实例，体现了编程思维的重要性。
        </div>

        <div class="key-point">
            <strong>项目统计：</strong>
            <ul>
                <li>代码行数：330+ 行</li>
                <li>功能模块：8个主要功能</li>
                <li>测试数据：10条完整测试用例</li>
                <li>开发周期：完整的设计、实现、测试流程</li>
            </ul>
        </div>

        <div class="speak-note">
            <strong>感谢各位老师的聆听！欢迎大家提问！</strong>
        </div>
    </div>
</body>

</html>